home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Games / Arashi 1.1.1 / source code / For your think c folder / VA Kit ƒ / VAFractalLine.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-03-31  |  1.5 KB  |  81 lines  |  [TEXT/KAHL]

  1. /*/
  2.      Project Arashi: VAFractalLine.c
  3.      Major release: Version 1.1d2, 9/5/95
  4.  
  5.      Last modification: Wednesday, March 31, 1993, 4:19
  6.      Created: Tuesday, January 15, 1991, 23:33
  7.  
  8.      Copyright © 1991-1993, Juri Munkki
  9. /*/
  10.  
  11. #include "VA.h"
  12.  
  13. static    char    *JitterP;
  14. static    int        JitterStep;
  15. static    int        JitterPoint;
  16. static    int        SizzleLevel;
  17. static    int        SizzleFactor;
  18. static    int        OpenCounter=0;
  19.  
  20. void    VACloseFractalLines()
  21. {
  22.     if(!--OpenCounter)
  23.         DisposPtr(JitterP);
  24. }
  25. void    VAInitFractalLines()
  26. {
  27.     register    int        i;
  28.     
  29.     if(!OpenCounter++)
  30.     {    JitterP=NewPtr(sizeof(char)*256);
  31.     
  32.         for(i=0;i<256;i++)
  33.         {    JitterP[i]=(((FastRandom()>>4) & 15)
  34.                             * Sins[((unsigned int)FastRandom()) % ANGLES])
  35.                             / 256;
  36.         }
  37.     }
  38. }
  39.  
  40. void    SizzlingLine(x1,y1,x2,y2)
  41. int        x1,y1,x2,y2;
  42. {
  43.     register    int        midx,midy;
  44.     register    int        dx,dy;
  45.     register    long    sizzler;
  46.  
  47.     dx=(x2-x1);
  48.     dy=(y2-y1);
  49.     sizzler=JitterP[*(unsigned char *)&JitterPoint];
  50.     JitterPoint+=JitterStep;
  51.  
  52.     midx=x1+(dx>>1)+((dy*sizzler)/SizzleFactor);
  53.     midy=y1+(dy>>1)-((dx*sizzler)/SizzleFactor);
  54.  
  55.     if(--SizzleLevel>0)
  56.     {    SizzlingLine(x1,y1,midx,midy);
  57.         SizzlingLine(midx,midy,x2,y2);
  58.     }
  59.     else
  60.     {    VASafeLineTo(midx,midy);
  61.         VASafeLineTo(x2,y2);
  62.     }
  63.     SizzleLevel++;
  64. }
  65. void    VAFractalLine(x1,y1,x2,y2,factor,level)
  66. int        x1,y1,x2,y2,factor,level;
  67. {
  68.     SizzleFactor=factor;
  69.     JitterStep=FastRandom();
  70.     SizzleLevel=level;
  71.  
  72.     VAMoveTo(x1,y1);    
  73.     SizzlingLine(x1,y1,x2,y2);
  74. }
  75.  
  76. void    VAFractalLineTo(x,y,factor,level)
  77. int        x,y,factor,level;
  78. {
  79.     VAFractalLine(VA.CurrentX,VA.CurrentY,x,y,factor,level);
  80.     VAMoveTo(x,y);
  81. }